package controllers;

import entities.ArsARTICULO;
import entities.ArsFAMILIA;
import entities.ArsPERFILCONTABLE;
import entities.ArsPERFILIMPOSITIVO;
import entities.ArsPERFILVENTAS;
import entities.ArsSUBFAMILIA;
import java.util.List;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Button;
import org.zkoss.zul.Div;
import org.zkoss.zul.Image;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;
import render.ArticulosRenderer;
import render.FamiliasRenderer;
import render.SubFamiliasRenderer;

public class ArticulosViewController extends GenericForwardComposer {
    Window win;
    Window winSearchFamily;
    Div winFamilias;
    Div winSubFamilias;
    Listbox articuloListBox;
    Listbox familiaListBox;
    Listbox subfamiliaListBox;
    
    Button cleanButton;
    Button editarButton;
    Button nuevoButton;
    Button borraArticuloBtn;
    Textbox filtroCodigo;
    Textbox filtroDescripcion;
    Textbox filtroAlias;
    Textbox filtroSeleccion;
    
    // Modal de nuevo
    Window winNew;
    
    // Elementos de modal nuevo
    Button saveArticuloNew;
    Textbox txtCodigoNew;
    Textbox txtDescripcionNew;
    Textbox txtAliasNew;
    Textbox txtSeleccionNew;
    Textbox txtTipoNew;
    
    // Modal de edicion
    Window winEdit;
    
    // Elementos de modal edicion
    Image txtFamiliaSearch;
    Image txtSubfamiliaSearch;
    Button saveArticulo;
    Textbox txtCodigo;
    Textbox txtDescripcion;
    Textbox txtAlias;
    Textbox txtSeleccion;
    Textbox txtTipo;
    Textbox txtFamilia;
    Textbox txtSubfamilia;
    
    ArsARTICULO articuloToEdit;
    ArsFAMILIA familiaToSet;
    ArsSUBFAMILIA subfamiliaToSet;
    
    // Elementos de Familia
    Textbox filtroCodigoFamilia;
    Textbox filtroDescripcionFamilia;
    Button cleanButton2;
    
    // Elementos de SubFamilia
    Textbox filtroCodigoSubFamilia;
    Textbox filtroDescripcionSubFamilia;
    Button cleanButton3;
    
    // Verificacion de datos de guardado
    boolean cod = false;
    boolean fam = false;
    boolean subfam = false;
    boolean desc = false;
    boolean ali = false;
    boolean sel = false;
    boolean tip = false;
    
    @Override
    @SuppressWarnings("unchecked")
    public void doAfterCompose (Component comp) throws Exception {
        super.doAfterCompose(comp);
        
        // set models and render to listbox after composed
        articuloListBox.setModel(getArticulosModel());
        articuloListBox.setItemRenderer(new ArticulosRenderer());
        
        // Setting this second model the error is trow....
        try {
            ListModel modelo = getFamiliasModel();
            familiaListBox.setModel(modelo);
            familiaListBox.setItemRenderer(new FamiliasRenderer());
            
            ListModel modelo2 = getSubFamiliasModel();
            subfamiliaListBox.setModel(modelo2);
            subfamiliaListBox.setItemRenderer(new SubFamiliasRenderer());
            //String msg = String.valueOf(modelo.getSize());
            //Messagebox.show(msg, "Familias Encontradas", Messagebox.ABORT, Messagebox.ERROR);
            
            //familiaListBox.setModel(getFamiliasModel());
            //familiaListBox.setItemRenderer(new FamiliasRenderer());
        } catch (Exception e) {
            e.printStackTrace();
        }
        editarButton.setDisabled(true);
        borraArticuloBtn.setDisabled(true);
        //saveArticulo.setDisabled(true);
    }
    
    public void refreshList() {
        articuloListBox.setModel(getArticulosModel());
        articuloListBox.setItemRenderer(new ArticulosRenderer());
    }

    // PROBANDO DOS MODELOS EN EL MISMO CONTROLADOR
    public ListModel getFamiliasModel () {
        List familias;
        
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select a from ArsFAMILIA as a");
        familias = q.getResultList();
        return new ListModelList(familias);
    }
    
    public ListModel getSubFamiliasModel () {
        List subfamilias;
        
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select a from ArsSUBFAMILIA as a");
        subfamilias = q.getResultList();
        return new ListModelList(subfamilias);
    }
    // PROBANDO DOS MODELOS EN EL MISMO CONTROLADOR
    
    public ListModel getArticulosModel () {
        List articulos;   
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select a from ArsARTICULO as a");
        articulos = q.getResultList();
        return new ListModelList(articulos);
    }
    
    public ListModel getArticulosByCodigo () {
        List articulos;
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select a from ArsARTICULO as a WHERE a.codigo LIKE :codigo AND a.descripcion LIKE :descripcion AND a.alias LIKE :alias AND a.seleccion LIKE :seleccion ORDER By a.codigo ASC");
        q.setParameter("codigo", "%" + filtroCodigo.getValue() + "%");
        q.setParameter("descripcion", "%" + filtroDescripcion.getValue() + "%");
        q.setParameter("alias", "%" + filtroAlias.getValue() + "%");
        q.setParameter("seleccion", "%" + filtroSeleccion.getValue() + "%");
        articulos = q.getResultList();
        return new ListModelList(articulos);
    }
    
    public ListModel getArticulosByDescripcion () {
        List articulos;
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select a from ArsARTICULO as a WHERE a.codigo LIKE :codigo AND a.descripcion LIKE :descripcion AND a.alias LIKE :alias AND a.seleccion LIKE :seleccion ORDER By a.descripcion ASC");
        q.setParameter("codigo", "%" + filtroCodigo.getValue() + "%");
        q.setParameter("descripcion", "%" + filtroDescripcion.getValue() + "%");
        q.setParameter("alias", "%" + filtroAlias.getValue() + "%");
        q.setParameter("seleccion", "%" + filtroSeleccion.getValue() + "%");
        articulos = q.getResultList();
        return new ListModelList(articulos);
    }
    
    public ListModel getArticulosByAlias () {
        List articulos;
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select a from ArsARTICULO as a WHERE a.codigo LIKE :codigo AND a.descripcion LIKE :descripcion AND a.alias LIKE :alias AND a.seleccion LIKE :seleccion ORDER By a.alias ASC");
        q.setParameter("codigo", "%" + filtroCodigo.getValue() + "%");
        q.setParameter("descripcion", "%" + filtroDescripcion.getValue() + "%");
        q.setParameter("alias", "%" + filtroAlias.getValue() + "%");
        q.setParameter("seleccion", "%" + filtroSeleccion.getValue() + "%");
        articulos = q.getResultList();
        return new ListModelList(articulos);
    }
    
    public ListModel getArticulosBySeleccion () {
        List articulos;
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select a from ArsARTICULO as a WHERE a.codigo LIKE :codigo AND a.descripcion LIKE :descripcion AND a.alias LIKE :alias AND a.seleccion LIKE :seleccion ORDER By a.seleccion ASC");
        q.setParameter("codigo", "%" + filtroCodigo.getValue() + "%");
        q.setParameter("descripcion", "%" + filtroDescripcion.getValue() + "%");
        q.setParameter("alias", "%" + filtroAlias.getValue() + "%");
        q.setParameter("seleccion", "%" + filtroSeleccion.getValue() + "%");
        articulos = q.getResultList();
        return new ListModelList(articulos);
    }
    
    public void onChange$filtroCodigo() {
        articuloListBox.setModel(getArticulosByCodigo());
        articuloListBox.setItemRenderer(new ArticulosRenderer());
    }
    
    public void onChange$filtroDescripcion() {
        articuloListBox.setModel(getArticulosByDescripcion());
        articuloListBox.setItemRenderer(new ArticulosRenderer());
    }
    
    public void onChange$filtroAlias() {
        articuloListBox.setModel(getArticulosByAlias());
        articuloListBox.setItemRenderer(new ArticulosRenderer());
    }
    
    public void onChange$filtroSeleccion() {
        articuloListBox.setModel(getArticulosBySeleccion());
        articuloListBox.setItemRenderer(new ArticulosRenderer());
    }
    
    public void onClick$cleanButton() {
        filtroCodigo.setValue("");
        filtroDescripcion.setValue("");
        filtroAlias.setValue("");
        filtroSeleccion.setValue("");
        articuloListBox.setModel(getArticulosModel());
        articuloListBox.setItemRenderer(new ArticulosRenderer());
    }
    
    public void onSelect$articuloListBox() {
        editarButton.setDisabled(false);
        borraArticuloBtn.setDisabled(false);
    }
    
    public void onClick$editarButton() {
        winFamilias.setVisible(false);
        winSubFamilias.setVisible(false);
        ListModel articulosModel = articuloListBox.getModel();
        articuloToEdit = (ArsARTICULO) articulosModel.getElementAt(articuloListBox.getSelectedIndex());
        txtCodigo.setValue(articuloToEdit.getCodigo());
        txtDescripcion.setValue(articuloToEdit.getDescripcion());
        txtAlias.setValue(articuloToEdit.getAlias());
        txtSeleccion.setValue(articuloToEdit.getSeleccion());
        txtTipo.setValue(articuloToEdit.getTipo());
        txtFamilia.setValue(articuloToEdit.getFamilia().getCodigo());
        txtSubfamilia.setValue(articuloToEdit.getArsSUBFAMILIA().getArsSUBFAMILIAPK().getCodigo());
        winEdit.doModal();
        winEdit.setVisible(true);
    }
    
    public void onClick$nuevoButton() {
            winNew.doModal();
            winNew.setVisible(true);
    }
    
    public void onClick$saveArticulo() {
        articuloToEdit.setCodigo(txtCodigo.getValue());
        articuloToEdit.setDescripcion(txtDescripcion.getValue());
        articuloToEdit.setAlias(txtAlias.getValue());
        articuloToEdit.setSeleccion(txtSeleccion.getValue());
        articuloToEdit.setTipo(txtTipo.getValue());
        articuloToEdit.setFamilia(familiaToSet);
        articuloToEdit.setArsSUBFAMILIA(subfamiliaToSet);
        
        // Persistir articulo en base de datos
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        
        try {
            em.getTransaction().begin();
            em.merge(articuloToEdit);
            em.getTransaction().commit();
            articuloListBox.setModel(getArticulosModel());
            articuloListBox.setItemRenderer(new ArticulosRenderer());
            Messagebox.show("Articulo guardado correctamente", "Guardando articulo", Messagebox.OK, Messagebox.INFORMATION);
            winEdit.setVisible(false);
        } catch (Exception ex){
            Messagebox.show(ex.toString(), "Error al guardar", Messagebox.ABORT, Messagebox.ERROR);
        }
    }
    
    // Funcion que retorna una familia cuando encuentra a travez de su codigo de familia.
    public ArsFAMILIA getFamilia(String codigoFamilia){
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        try{
            TypedQuery <ArsFAMILIA> queryFamilia = em.createNamedQuery("ArsFAMILIA.findByCodigo", ArsFAMILIA.class);
            queryFamilia.setParameter("codigo", codigoFamilia);
            ArsFAMILIA familiaResult = queryFamilia.getSingleResult();
            return familiaResult;
        }catch(Exception e){
            return null;
        }
    }
    
    public void onBlur$txtFamilia() {
        familiaToSet = getFamilia(txtFamilia.getValue());
        
        if (familiaToSet == null ) {
            txtFamilia.setStyle("border:2px solid #DF0101; background:#81F79F; display: block;");
            fam = false;
            Clients.showNotification("Familia inexistente", "warning", txtFamilia, "end_center", 3000);
        } else {
            fam = true;
            txtFamilia.setStyle("background:#81F79F;");
        }
        evaluateSaving();
    }
    
    public void onBlur$txtDescripcion() {
        if (txtDescripcion.getValue().isEmpty()) {
            txtDescripcion.setStyle("border:2px solid #DF0101; background:#F2F5A9; display: block;");
            Clients.showNotification("Descripción es requerido", "warning", txtDescripcion, "end_center", 3000);
            desc = false;
        } else {
            txtDescripcion.setStyle("background:#F2F5A9;");
            desc = true;
        }
        evaluateSaving();
    }
    
    // Funcion que retorna una subfamilia cuando encuentra a travez de su codigo de familia.
    public ArsSUBFAMILIA getSubFamilia(String codigoSubFamilia){
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        try{
            TypedQuery <ArsSUBFAMILIA> querySubFamilia = em.createNamedQuery("ArsSUBFAMILIA.findByFamiliaAndCodigo", ArsSUBFAMILIA.class);
            querySubFamilia.setParameter("familia", familiaToSet.getCodigo());
            querySubFamilia.setParameter("codigo", codigoSubFamilia);
            ArsSUBFAMILIA subfamiliaResult = querySubFamilia.getSingleResult();
            return subfamiliaResult;
        }catch(Exception e){
            return null;
        }
    }
    
    public void onBlur$txtSubfamilia() {
        subfamiliaToSet = getSubFamilia(txtSubfamilia.getValue());
        
        if (subfamiliaToSet == null ) {
            txtSubfamilia.setStyle("border:2px solid #DF0101; background:#81F79F; display: block;");
            subfam = false;
            Clients.showNotification("Subfamilia inexitente o incorrecta para la familia especificada", "warning", txtSubfamilia, "end_center", 3000);
        } else {
            txtSubfamilia.setStyle("background:#81F79F;");
            subfam = true;
        }
        evaluateSaving();
    }
    
    public void onClick$saveArticuloNew() {
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();

        TypedQuery<ArsFAMILIA> queryFamilia = em.createNamedQuery("ArsFAMILIA.findAll", ArsFAMILIA.class);
        List<ArsFAMILIA> familiaResult = queryFamilia.getResultList();
        ArsFAMILIA familia = familiaResult.get(0);

        javax.persistence.Query querySubFamilia = em.createQuery("SELECT c FROM ArsSUBFAMILIA AS c WHERE c.arsSUBFAMILIAPK.familia = :familia");
        querySubFamilia.setParameter("familia", familia.getCodigo());
        List<ArsSUBFAMILIA> subFamiliaResult = querySubFamilia.getResultList();

        TypedQuery<ArsPERFILCONTABLE> queryPerfilContable = em.createNamedQuery("ArsPERFILCONTABLE.findAll", ArsPERFILCONTABLE.class);
        List<ArsPERFILCONTABLE> perfilContableResult = queryPerfilContable.getResultList();

        TypedQuery<ArsPERFILIMPOSITIVO> queryPerfilImpositivo = em.createNamedQuery("ArsPERFILIMPOSITIVO.findAll", ArsPERFILIMPOSITIVO.class);
        List<ArsPERFILIMPOSITIVO> perfilImpositivoResult = queryPerfilImpositivo.getResultList();

        TypedQuery<ArsPERFILVENTAS> queryPerfilVentas = em.createNamedQuery("ArsPERFILVENTAS.findAll", ArsPERFILVENTAS.class);
        List<ArsPERFILVENTAS> perfilVentasResult = queryPerfilVentas.getResultList();

        ArsARTICULO newArticulo = new ArsARTICULO();

        newArticulo.setCodigo(txtCodigoNew.getValue());
        newArticulo.setDescripcion(txtDescripcionNew.getValue());
        newArticulo.setAlias(txtAliasNew.getValue());
        newArticulo.setSeleccion(txtSeleccionNew.getValue());
        newArticulo.setTipo(txtTipoNew.getValue());

        newArticulo.setFamilia(familia);
        newArticulo.setArsSUBFAMILIA(subFamiliaResult.get(0));
        newArticulo.setPerfilContable(perfilContableResult.get(0));
        newArticulo.setPerfilImpositivo(perfilImpositivoResult.get(0));
        newArticulo.setPerfilVentas(perfilVentasResult.get(0));

        try {

            em.getTransaction().begin();
            em.persist(newArticulo);
            em.getTransaction().commit();
            refreshList();
            cierroVentana();

            Messagebox.show("Artículo guardado correctamente", "Guardando Artículos", Messagebox.OK, Messagebox.INFORMATION);

        } catch (Exception ex) {
            Messagebox.show("Error guardado el Artículo " + ex.toString(), "Error Guardando", Messagebox.ABORT, Messagebox.ERROR);
        }
    }

    public void cierroVentana() {
        winNew.setVisible(false);
    }
    
    public void onClick$txtFamiliaSearch() {
        //winFamilias.doModal();
        winFamilias.setVisible(true);
        saveArticulo.setDisabled(true);
    }
    
    public void onClick$txtSubfamiliaSearch() {
        subfamiliaListBox.setModel(getSubFamiliasByFamilia());
        subfamiliaListBox.setItemRenderer(new SubFamiliasRenderer());
        winSubFamilias.setVisible(true);
        saveArticulo.setDisabled(true);
    }
    
    public void evaluateSaving() {
        saveArticulo.setDisabled(true);
        
        cod = true;
        desc = true;
        ali = true;
        sel = true;
        tip = true;
        
        if (cod == true && fam == true && subfam == true && desc == true && ali == true && sel == true && tip == true) {
            saveArticulo.setDisabled(false);
        }
    }
    
    public void onSelect$familiaListBox() {
        ListModel familiasModel = familiaListBox.getModel();
        ArsFAMILIA familiaSel = (ArsFAMILIA) familiasModel.getElementAt(familiaListBox.getSelectedIndex());
        String familiaSelected = familiaSel.getCodigo();
        familiaListBox.setSelectedIndex(-1);
        winFamilias.setVisible(false);
        try {
            txtFamilia.setValue(familiaSelected);
            txtFamilia.setFocus(true);
            txtSubfamilia.setValue("");
            //evaluateSaving();
        } catch (Exception e) {
            Messagebox.show(e.toString(), "Excepción", Messagebox.ABORT, Messagebox.ERROR);
        }
    }
    
    public void onSelect$subfamiliaListBox() {
        ListModel subfamiliasModel = subfamiliaListBox.getModel();
        ArsSUBFAMILIA subfamiliaSel = (ArsSUBFAMILIA) subfamiliasModel.getElementAt(subfamiliaListBox.getSelectedIndex());
        String subfamiliaSelected = subfamiliaSel.getArsSUBFAMILIAPK().getCodigo();
        subfamiliaListBox.setSelectedIndex(-1);
        winSubFamilias.setVisible(false);
        try {
            txtSubfamilia.setValue(subfamiliaSelected);
            txtSubfamilia.setFocus(true);
        } catch (Exception e) {
            Messagebox.show(e.toString(), "Excepción", Messagebox.ABORT, Messagebox.ERROR);
        }
    }
   
   // *************************************************************************
   // FILTROS Y DEMAS ELEMENTOS DE FAMILIA
   public ListModel getFamiliasByCodigo () {
        List familias;
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select a from ArsFAMILIA as a WHERE a.codigo LIKE :codigo AND a.descripcion LIKE :descripcion ORDER By a.codigo ASC");
        q.setParameter("codigo", "%" + filtroCodigoFamilia.getValue() + "%");
        q.setParameter("descripcion", "%" + filtroDescripcionFamilia.getValue() + "%");
        familias = q.getResultList();
        return new ListModelList(familias);
    }
    
    public ListModel getFamiliasByDescripcion () {
        List familias;
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select a from ArsFAMILIA as a WHERE a.codigo LIKE :codigo AND a.descripcion LIKE :descripcion ORDER By a.descripcion ASC");
        q.setParameter("codigo", "%" + filtroCodigoFamilia.getValue() + "%");
        q.setParameter("descripcion", "%" + filtroDescripcionFamilia.getValue() + "%");
        familias = q.getResultList();
        return new ListModelList(familias);
    }
    
    public void onChange$filtroCodigoFamilia() {
        familiaListBox.setModel(getFamiliasByCodigo());
        familiaListBox.setItemRenderer(new FamiliasRenderer());
    }
    
    public void onChange$filtroDescripcionFamilia() {
        familiaListBox.setModel(getFamiliasByDescripcion());
        familiaListBox.setItemRenderer(new FamiliasRenderer());
    }
    
    public void onClick$cleanButton2() {
        filtroCodigoFamilia.setValue("");
        filtroDescripcionFamilia.setValue("");
        familiaListBox.setModel(getFamiliasModel());
        familiaListBox.setItemRenderer(new FamiliasRenderer());
    }
    // FIN DE FILTROS Y DEMAS ELEMENTOS DE FAMILIA
    // *************************************************************************
    
     // *************************************************************************
   // FILTROS Y DEMAS ELEMENTOS DE SUBFAMILIA
   public ListModel getSubFamiliasByFamilia () {
        List subfamilias;
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("SELECT a FROM ArsSUBFAMILIA a WHERE a.arsSUBFAMILIAPK.familia = :family");
        q.setParameter("family", txtFamilia.getValue().toUpperCase());
        subfamilias = q.getResultList();
        return new ListModelList(subfamilias);
    }
   
   public void deleteElement(ArsARTICULO articulo) {
       EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();

        try {
            em.getTransaction().begin();
            ArsARTICULO articuloToDelete = em.merge(articulo);
            em.remove(articuloToDelete);
            em.getTransaction().commit();
            articuloListBox.setModel(getArticulosModel());
            articuloListBox.setItemRenderer(new ArticulosRenderer());
            alert("Articulo eliminado con exito");
            //Messagebox.show("Artículo eliminado ", "Eliminado", Messagebox.OK, Messagebox.INFORMATION);
        } catch (Exception ex) {
            alert("Error eliminando articulo, por favor reintente");
            //Messagebox.show("Error eliminando el Artículo " + ex.toString(), "Error Eliminando", Messagebox.ABORT, Messagebox.ERROR);
        }
   }
   
   public void onClick$borraArticuloBtn() {
        ListModel articulosModel = articuloListBox.getModel();
        final ArsARTICULO articulo = (ArsARTICULO) articulosModel.getElementAt(articuloListBox.getSelectedIndex());
        
        Messagebox.show("Realmente desea eliminar el articulo "+articulo.getDescripcion()+" ?", "Eliminar Articulo", Messagebox.YES|Messagebox.NO,
            Messagebox.QUESTION,
            new EventListener() {
                public void onEvent(Event evt) {
                    switch (((Integer)evt.getData()).intValue()) {
                    case Messagebox.YES: deleteElement(articulo); break; //the Yes button is pressed
                    case Messagebox.NO: break; //the No button is pressed
                    }
                }
            }
        );
    }
    
}